package com.test.design.pattern.singleton.demo10;

/**
 * @ClasName Singleton
 * @Descripution TODO 破坏单例模式 反射
 * @Author leikw
 * @Date 2021/11/1 9:01
 * @Version V1.0
 */
public class Singleton {

    private Singleton(){
        /*
            反射破解单例模式需要添加的代码
            当通过反射方式调用构造方法进行创建创建时，直接抛异常。不运行此中操作。
        */
        if(singleton != null) {
            throw new RuntimeException();
        }
    };

    private static volatile Singleton singleton;

    public static Singleton getInstance(){
        if(singleton != null) {
            return singleton;
        }
        synchronized (Singleton.class) {
            if(singleton != null) {
                return singleton;
            }
            singleton = new Singleton();
            return singleton;
        }
    }

}
